class Container{
    static of(value){
        return new Container(value);
    }

    constructor(value) {
        this._value = value;
    }

    map(fn){
        return Container.of(fn(this._value))
    }
}

class Maybe{
    //static  声明的方法是静态方法，不会被实例继承，而是通过类来直接调用
    // 因此实例调用该方法发则会报错，没有该方法，父类的静态方法会被子类继承
    static of(x){
        return new Maybe(x)
    }

    isNothing(){
        return this._value === null || this._value === undefined
    }

    constructor(x) {
        this._value = x;
    }

    map(fn){
        return this.isNothing() ?  this : Maybe.of(fn(this._value))
    }
}

module.exports = {Maybe,Container}